package com.java.jvm.loader;
import java.util.HashMap;
import java.util.Map;
/**
 * 通过此案例分析，类变量在初始化之前和之后它的值什么？
 * 1)初始化阶段之前，它的值为默认值(具体值要看类型)-默认值在在类加载的准备阶段赋值
 * 2)初始化阶段之后，它的值为等号右边的值。
 */
class ClassB{
    private static  ClassB instance=new ClassB();
    static{
        System.out.println("ClassB.static{}.instance="+instance);
    }
    public ClassB(){
        System.out.println("ClassB().instance="+instance);
    }
}
class ClassC{
    private static  ClassC instance=new ClassC();
    private static  Map<String,Object> map=new HashMap<>();
    public ClassC(){
        map.put("A", 100);//null.put(),此时就会出现空指针异常
        map.put("A", 200);
        System.out.println(map);
    }
}
public class ClassLoadingInitTests {
    public static void main(String[] args) throws ClassNotFoundException {
//        Class.forName("com.java.jvm.loader.ClassB",
//                true,
//                ClassLoader.getSystemClassLoader());
        Class.forName("com.java.jvm.loader.ClassC",
                true,
                ClassLoader.getSystemClassLoader());
    }
}
